package com.xuan.qimen.core.zhuan.shijia;

import lombok.Data;

import java.util.Calendar;
import java.util.Date;

/**
 * 设置
 */
@Data
public class ZhuanShiJiaQiMenSetting {

    /**
     * 性别（0:女。1:男）
     */
    private int sex;

    /**
     * 姓名
     */
    private String name;

    /**
     * 测事
     */
    private String occupy;

    /**
     * 地区
     */
    private String address;

    /**
     * 日期
     */
    private Date date;

    /**
     * 日期类型（0:公历。1:农历）
     */
    private int dateType;

    /**
     * 闰月（0:农历月按闰月计算。1:农历月不按闰月计算）
     */
    private int leapMonth;

    /**
     * 年干支设置（0:以正月初一作为新年的开始。1:以立春当天作为新年的开始。2:以立春交接的时刻作为新年的开始）
     */
    private int yearGanZhiSet;

    /**
     * 月干支设置（0:以节交接当天起算。1:以节交接时刻起算）
     */
    private int monthGanZhiSet;

    /**
     * 日干支设置（0:晚子时日干支算当天。1:晚子时日干支算明天）
     */
    private int dayGanZhiSet;

    /**
     * 时干支设置（0:支持早子时和晚子时）
     */
    private int hourGanZhiSet;

//************************************************************************************************************************************

    /**
     * 初始化设置
     */
    public ZhuanShiJiaQiMenSetting() {

        setInitializedData(); // 设置默认初始化数据

    }

    /**
     * 使用公历日期初始化
     *
     * @param date 公历日期
     */
    public ZhuanShiJiaQiMenSetting(Date date) {

        setInitializedData(); // 设置默认初始化数据

        this.date = date; // 日期

    }

    /**
     * 使用日期初始化
     *
     * @param date     公历日期
     * @param dateType 日期类型（0:公历。1:农历）
     */
    public ZhuanShiJiaQiMenSetting(Date date, int dateType) {

        setInitializedData(); // 设置默认初始化数据

        this.date = date; // 日期
        this.dateType = dateType; // 日期类型（0:公历。1:农历）

    }

    /**
     * 使用年月日时初始化
     *
     * @param year  年
     * @param month 月
     * @param day   日
     * @param hour  时
     */
    public ZhuanShiJiaQiMenSetting(int year, int month, int day, int hour) {

        setInitializedData(); // 设置默认初始化数据

        month -= 1;
        Calendar c = Calendar.getInstance();
        c.set(year, month, day, hour, 0);
        this.date = c.getTime(); // // 日期

    }

    /**
     * 使用年月日时、日期类型初始化
     *
     * @param year     年
     * @param month    月
     * @param day      日
     * @param hour     时
     * @param dateType 日期类型（0:公历。1:农历）
     */
    public ZhuanShiJiaQiMenSetting(int year, int month, int day, int hour, int dateType) {

        setInitializedData(); // 设置默认初始化数据

        month -= 1;
        Calendar c = Calendar.getInstance();
        c.set(year, month, day, hour, 0);
        this.date = c.getTime(); // // 日期
        this.dateType = dateType; // 日期类型（0:公历。1:农历）

    }

//------------------------------------------------------------------------------------------------------------------------------------

    /**
     * 设置默认初始化数据
     */
    private void setInitializedData() {

        this.sex = ZhuanShiJiaQiMenEnum.SEX_MAN.getMark(); // 性别（默认→ 男）
        this.name = null; // 姓名（默认→ 空）
        this.occupy = null; // 占事（默认→ 空）
        this.address = null; // 地区（默认→ 空）
        this.date = new Date(); // 日期（默认→ 当前日期）
        this.dateType = ZhuanShiJiaQiMenEnum.DATE_TYPE_SOLAR.getMark(); // 日期类型（默认→ 公历）
        this.leapMonth = ZhuanShiJiaQiMenEnum.LEAP_MONTH_NO.getMark(); //闰月（默认→ 农历月不按闰月计算）
        this.yearGanZhiSet = ZhuanShiJiaQiMenEnum.YEAR_GAN_ZHI_LI_CHUN_DAY.getMark(); // 年干支（默认→ 以立春当天作为新年的开始）
        this.monthGanZhiSet = ZhuanShiJiaQiMenEnum.MONTH_GAN_ZHI_SHI_KE.getMark(); // 月干支（默认→ 以节交接时刻起算）
        this.dayGanZhiSet = ZhuanShiJiaQiMenEnum.DAY_GAN_ZHI_TOMORROW.getMark(); // 日干支（默认→ 晚子时日干支算明天）
        this.hourGanZhiSet = ZhuanShiJiaQiMenEnum.HOUR_GAN_ZHI.getMark(); // 时干支（默认→ 支持早子时和晚子时）

    }


}
